JavaScript'i mooduligraafi optimeerimine: Sõltuvusgraafi lihtsustamine | MLOG | MLOG
            document.addEventListener("DOMContentLoaded", function() {
 var lazyloadImages = document.querySelectorAll("img.lazy");

 function lazyload () {
 lazyloadImages.forEach(function(img) {
 if (img.offsetTop < (window.innerHeight + window.pageYOffset)) {
 img.src = img.dataset.src;
 img.classList.remove("lazy");
 }
 });
 if(lazyloadImages.length === 0) {
 document.removeEventListener("scroll", lazyload);
 window.removeEventListener("resize", lazyload);
 window.removeEventListener("orientationChange", lazyload);
 }
 }

 document.addEventListener("scroll", lazyload);
 window.addEventListener("resize", lazyload);
 window.addEventListener("orientationChange", lazyload);
 });
            

Praktiline nõuanne: Rakendage laisklaadimist piltidele, videotele ja muudele ressurssidele, mis ei ole ekraanil kohe nähtavad. Kaaluge teekide nagu `lozad.js` või brauseri-omaste laisklaadimise atribuutide kasutamist.

6. Tree Shaking ja surnud koodi eemaldamine

Tree shaking on tehnika, mis eemaldab ehitusprotsessi käigus teie rakendusest kasutamata koodi. See võib oluliselt vähendada paketi suurust, eriti kui kasutate teeke, mis sisaldavad palju koodi, mida te ei vaja.

Näide:

Oletame, et kasutate abiteeki, mis sisaldab 100 funktsiooni, kuid kasutate oma rakenduses neist ainult 5. Ilma tree shaking'uta lisataks kogu teek teie paketti. Tree shaking'uga lisataks ainult need 5 funktsiooni, mida te kasutate.

Konfiguratsioon:

Veenduge, et teie komplekteerija on konfigureeritud teostama tree shaking'ut. Webpackis on see tavaliselt vaikimisi lubatud, kui kasutate tootmisrežiimi. Rollupis peate võib-olla kasutama `@rollup/plugin-commonjs` pluginat.

Praktiline nõuanne: Konfigureerige oma komplekteerija teostama tree shaking'ut ja veenduge, et teie kood on kirjutatud viisil, mis on tree shaking'uga ühilduv (nt kasutades ES-mooduleid).

7. Sõltuvuste minimeerimine

Teie projekti sõltuvuste arv võib otseselt mõjutada mooduligraafi keerukust. Iga sõltuvus lisab graafile, suurendades potentsiaalselt ehitusaega ja paketi suurust. Vaadake regulaarselt üle oma sõltuvused ja eemaldage kõik, mida enam ei vajata või mida saab asendada väiksemate alternatiividega.

Näide:

Selle asemel, et kasutada suurt abiteeki lihtsa ülesande jaoks, kaaluge oma funktsiooni kirjutamist või väiksema, spetsialiseerituma teegi kasutamist.

Praktiline nõuanne: Vaadake oma sõltuvused regulaarselt üle, kasutades tööriistu nagu `npm audit` või `yarn audit`, ja tuvastage võimalusi sõltuvuste arvu vähendamiseks või nende asendamiseks väiksemate alternatiividega.

8. Paketi suuruse ja jõudluse analüüsimine

Analüüsige regulaarselt oma paketi suurust ja jõudlust, et tuvastada parandusvaldkondi. Tööriistad nagu webpack-bundle-analyzer ja Lighthouse aitavad teil tuvastada suuri mooduleid, kasutamata koodi ja jõudluse kitsaskohti.

Näide (webpack-bundle-analyzer):

Lisage `webpack-bundle-analyzer` plugin oma webpacki konfiguratsiooni.

            const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
 // ... other webpack configuration
 plugins: [
 new BundleAnalyzerPlugin()
 ]
};

            

Kui käivitate ehituse, genereerib plugin interaktiivse puukaardi, mis näitab iga mooduli suurust teie paketis.

Praktiline nõuanne: Integreerige paketi analüüsi tööriistad oma ehitusprotsessi ja vaadake tulemused regulaarselt üle, et tuvastada optimeerimisvaldkondi.

9. Moodulite föderatsioon (Module Federation)

Moodulite föderatsioon, webpack 5 funktsioon, võimaldab teil jagada koodi erinevate rakenduste vahel käitusajal. See võib olla kasulik mikro-front-endide ehitamiseks või ühiste komponentide jagamiseks erinevate projektide vahel. Moodulite föderatsioon aitab vähendada pakettide suurust ja parandada jõudlust, vältides koodi dubleerimist.

Näide (põhiline moodulite föderatsiooni seadistus):

Rakendus A (Host):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appA",
 remotes: {
 appB: "appB@http://localhost:3001/remoteEntry.js",
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Rakendus B (Remote):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appB",
 exposes: {
 './MyComponent': './src/MyComponent',
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Praktiline nõuanne: Kaaluge moodulite föderatsiooni kasutamist suurte, jagatud koodiga rakenduste või mikro-front-endide ehitamiseks.

Spetsiifilised kaalutlused komplekteerijatele

Erinevatel komplekteerijatel on erinevad tugevused ja nõrkused mooduligraafi optimeerimisel. Siin on mõned spetsiifilised kaalutlused populaarsetele komplekteerijatele:

Webpack

Rollup

Parcel

Globaalne perspektiiv: Optimeerimiste kohandamine erinevate kontekstide jaoks

Mooduligraafide optimeerimisel on oluline arvestada globaalset konteksti, milles teie rakendust kasutatakse. Tegurid nagu võrgutingimused, seadmete võimekus ja kasutajate demograafia võivad mõjutada erinevate optimeerimistehnikate tõhusust.

Kokkuvõte

JavaScripti mooduligraafi optimeerimine on esiotsa arenduse oluline aspekt. Sõltuvuste lihtsustamise, ringikujuliste sõltuvuste eemaldamise ja koodi jaotamise rakendamisega saate oluliselt parandada ehitusjõudlust, vähendada paketi suurust ja kiirendada rakenduse laadimisaega. Analüüsige regulaarselt oma paketi suurust ja jõudlust, et tuvastada parandusvaldkondi, ning kohandage oma optimeerimisstrateegiaid vastavalt globaalsele kontekstile, milles teie rakendust kasutatakse. Pidage meeles, et optimeerimine on pidev protsess ning pidev jälgimine ja täiustamine on optimaalsete tulemuste saavutamiseks hädavajalikud.

Neid tehnikaid järjepidevalt rakendades saavad arendajad üle maailma luua kiiremaid, tõhusamaid ja kasutajasõbralikumaid veebirakendusi.